package main

import (
	"flag"
	"fmt"
	"os"
	"runtime/pprof"
	"time"
)

// 这是一段有问题的函数
func logisCode() {
	var c chan int // nil
	for {
		select {
		case v := <-c: // 阻塞
			fmt.Println("value:", v)
		default:
		}
	}
}

func main() {
	var isCPUPprof bool
	var isMemPprof bool

	flag.BoolVar(&isCPUPprof, "cpu", false, "turn cpu pprof on")
	flag.BoolVar(&isMemPprof, "mem", false, "turn mem pprof on")
	flag.Parse()

	if isCPUPprof {
		fileObj, err := os.Create("./cpu.pprof")
		if err != nil {
			fmt.Printf("err: %v\n", err)
			return
		}
		pprof.StartCPUProfile(fileObj)
		defer func() {
			pprof.StopCPUProfile()
			fileObj.Close()
		}()
	}

	for i := 0; i < 6; i++ {
		go logisCode()
	}
	time.Sleep(10 * time.Second)

	// 以上代码没有内存开销，仅为演示使用
	// if isMemPprof {
	// 	fileObj, err := os.Create("./mem.pprof")
	// 	if err != nil {
	// 		fmt.Printf("err: %v\n", err)
	// 		return
	// 	}
	// 	pprof.WriteHeapProfile(fileObj)
	// 	fileObj.Close()
	// }
}
